package main

import "fmt"

func doSomething(base int) (func(int) int, func(int) int) {
	f1 := func(i int) int {
		base += i
		return base
	}
	f2 := func(j int) int {
		base -= j
		return base
	}
	return f1, f2
}

func main() {
	/*
		发生了内存逃逸：（闭包型逃逸）
			外层函数的局部变量 base，被返回值函数使用，使得本该在栈上存储的 base 变量，内存被分配到了堆上。
	*/
	f1, f2 := doSomething(20)
	fmt.Println(f1(10), f2(10))
	/*
		30 20
	*/
}
